<template><div><h2 id="laravel-sail" tabindex="-1"><a class="header-anchor" href="#laravel-sail"><span>Laravel Sail</span></a></h2>
<ul>
<li><a href="#introduction">介绍</a></li>
<li><a href="#installation">安装 &amp; 设定</a>
<ul>
<li><a href="#installing-sail-into-existing-applications">安装 Sail 到当前应用中</a></li>
<li><a href="#configuring-a-bash-alias">配置 Bash 别名</a></li>
</ul>
</li>
<li><a href="#starting-and-stopping-sail">启动 &amp; 停止 Sail</a></li>
<li><a href="#executing-sail-commands">执行命令</a>
<ul>
<li><a href="#executing-php-commands">执行 PHP 命令</a></li>
<li><a href="#executing-composer-commands">执行 Composer 命令</a></li>
<li><a href="#executing-artisan-commands">执行 Artisan 命令</a></li>
<li><a href="#executing-node-npm-commands">执行 Node / NPM 命令</a></li>
</ul>
</li>
<li><a href="#interacting-with-sail-databases">与数据库交互</a>
<ul>
<li><a href="#mysql">MySQL</a></li>
<li><a href="#redis">Redis</a></li>
<li><a href="#meilisearch">MeiliSearch</a></li>
</ul>
</li>
<li><a href="#file-storage">文件存储</a></li>
<li><a href="#running-tests">运行测试</a>
<ul>
<li><a href="#laravel-dusk">Laravel Dusk</a></li>
</ul>
</li>
<li><a href="#previewing-emails">预览电子邮件</a></li>
<li><a href="#sail-container-cli">容器 CLI</a></li>
<li><a href="#sail-php-versions">PHP 版本</a></li>
<li><a href="#sail-node-versions">Node 版本</a></li>
<li><a href="#sharing-your-site">共享您的网站</a></li>
<li><a href="#debugging-with-xdebug">使用 Xdebug 进行调试</a>
<ul>
<li><a href="#xdebug-cli-usage">通过命令行使用 Xdebug 进行调试</a></li>
<li><a href="#xdebug-browser-usage">通过浏览器使用 Xdebug 进行调试</a></li>
</ul>
</li>
<li><a href="#sail-customization">定制化</a></li>
</ul>
<h2 id="介绍" tabindex="-1"><a class="header-anchor" href="#介绍"><span>介绍</span></a></h2>
<p><a href="https://github.com/laravel/sail" target="_blank" rel="noopener noreferrer">Laravel Sail</a> 是一个轻量级的命令行界面，用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 为使用 PHP, MySQL, 和 Redis 构建 Laravel 应用提供了一个很好的起点，不需要事先有 Docker 经验。</p>
<p>Sail 的核心是 <code v-pre>docker-compose.yml</code> 文件和存储在项目根目录的 <code v-pre>sail</code> 脚本。<code v-pre>sail</code> 脚本为 CLI 提供了便捷的方法，可用于与 <code v-pre>docker-compose.yml</code> 文件定义的 Docker 容器进行交互。</p>
<p>Laravel Sail 支持 macOS、Linux 和 Windows (通过 <a href="https://docs.microsoft.com/en-us/windows/wsl/about" target="_blank" rel="noopener noreferrer">WSL2</a>）。</p>
<h2 id="安装-设定" tabindex="-1"><a class="header-anchor" href="#安装-设定"><span>安装 &amp; 设定</span></a></h2>
<p>Laravel Sail 会随着所有全新的 Laravel 应用程序一起自动安装，因此你可以立即的开始使用它。要了解如何创建一个新的 Laravel 应用程序，请查阅适合您目前操作系统的 <a href="https://learnku.com/docs/laravel/10.x/installation" target="_blank" rel="noopener noreferrer">安装文档</a>。在安装过程中，你将被要求选择你的应用程序将与哪些 Sail 支持的服务进行交互。</p>
<h3 id="安装-sail-到当前应用中" tabindex="-1"><a class="header-anchor" href="#安装-sail-到当前应用中"><span>安装 Sail 到当前应用中</span></a></h3>
<p>假如你有兴趣在你现有的 Laravel 应用程序中使用 Sail，你可以透过 Composer 套件管理简单的安装 Sail。当然，这些步骤的前提是假设你现有的本地开发环境允许你安装 Copmoser 依赖：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token function">composer</span> require laravel/sail <span class="token parameter variable">--dev</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>在 Sail 完成安装后，你可以运行 Artisan 命令 <code v-pre>sail:install</code>。这个命令将会发布 Sail 的 <code v-pre>docker-compose.yml</code> 文件到你应用程序的根目录：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">php artisan sail:install</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>最后，你可以启动 Sail 的服务了。想要继续学习如何使用 Sail，请接着阅读本文挡的其余部分：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">./vendor/bin/sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="增加额外服务" tabindex="-1"><a class="header-anchor" href="#增加额外服务"><span>增加额外服务</span></a></h4>
<p>如果你想在你现有的 Sail 安装中添加一个额外的服务，你可以运行<code v-pre>sail:add</code> Artisan 命令。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">php artisan sail:add</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="使用开发容器" tabindex="-1"><a class="header-anchor" href="#使用开发容器"><span>使用开发容器</span></a></h4>
<p>如果你想在 <a href="https://code.visualstudio.com/docs/remote/containers" target="_blank" rel="noopener noreferrer">Devcontainer</a> 中进行开发，你可以在执行 <code v-pre>sail:install</code> 命令时添加 <code v-pre>--devcontainer</code> 参数。<code v-pre>--devcontainer</code> 将指示 <code v-pre>sail:install</code> 命令将默认的 <code v-pre>.devcontainer/devcontainer.json</code> 文件发布到你的应用程序根目录：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">php artisan sail:install <span class="token parameter variable">--devcontainer</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3 id="配置-shell-别名" tabindex="-1"><a class="header-anchor" href="#配置-shell-别名"><span>配置 Shell 别名</span></a></h3>
<p>默认情况下，Sail 命令使用 <code v-pre>vendor/bin/sail</code> 脚本调用，该脚本已包含在所有新建的 Laravel 应用程序中：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">./vendor/bin/sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>但与其重复的输入 <code v-pre>vendor/bin/sail</code> 来执行 Sail 命令，你可能会希望配置一个 Shell 别名方便你更容易的执行 Sail 命令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token builtin class-name">alias</span> <span class="token assign-left variable">sail</span><span class="token operator">=</span><span class="token string">'[ -f sail ] &amp;&amp; sh sail || sh vendor/bin/sail'</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>为了确保这一点始终可用，你可以把它添加到你的主目录下的 shell 配置文件中，如 <code v-pre>~/.zshrc</code> 或 <code v-pre>~/.bashrc</code> ，然后重新启动你的 shell。</p>
<p>一旦配置了 shell 别名，你可以通过简单地输入 <code v-pre>sail</code> 来执行 Sail 命令。本文接下来的示例都假定你已经配置了此别名：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2 id="启动-停止-sail" tabindex="-1"><a class="header-anchor" href="#启动-停止-sail"><span>启动 &amp; 停止 Sail</span></a></h2>
<p>Laravel Sail 的 <code v-pre>docker-compose.yml</code> 文件定义了各种 Docker 容器，它们可以协同工作以帮助你构建 Laravel 应用程序。每一个容器都定义在 <code v-pre>docker-compose.yml</code> 文件的 <code v-pre>services</code> 的配置内。 <code v-pre>laravel.test</code> 容器是将服务于您的应用程序的主要应用程序容器。</p>
<p>在开始 Sail 之前，你应该确认没有其他的网站服务器或数据库正运行在你的本地计算机上。要开始启用 <code v-pre>docker-compose.yml</code> 文件中定义的所有 Docker 容器，请执行 <code v-pre>up</code> 命令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>要在后台启动所有的 Docker 容器，你可以以 &quot;detached&quot; 模式启动 Sail。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail up <span class="token parameter variable">-d</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>启动应用程序的容器后，你可以通过 Web 浏览器中访问项目：<a href="http://localhost/" target="_blank" rel="noopener noreferrer">http://localhost</a>.</p>
<p>要停止所有的容器，你可以简单的按 Control + C 来停止容器的执行。或者，如果容器是在后台运行的，你可以使用 <code v-pre>stop</code> 命令。</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail stop</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2 id="执行命令" tabindex="-1"><a class="header-anchor" href="#执行命令"><span>执行命令</span></a></h2>
<p>使用 Laravel Sail 时，应用程序在 Docker 容器中执行，并且与本地计算机隔离。不过 Sail 提供了一种针对应用程序运行各种命令的便捷方法，例如任意的 PHP 命令，Artisan 命令，Composer 命令和 Node / NPM 命令。</p>
<p><strong>当你阅读 Laravel 文档时，你可能经常看到在未使用 Sail 的状况下运行 Composer，Artisan 或是 Node / NPM 命令。</strong> 以下示例假设你已经在本地计算机上安装上述工具。如果你打算使用 Sail 建构你的本地开发环境 ，你需要改用 Sail 运行这些命令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token comment"># 在本地运行 Artisan 命令...</span></span>
<span class="line">php artisan queue:work</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 在 Laravel Sail 中运行 Artisan 命令...</span></span>
<span class="line">sail artisan queue:work</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="执行-php-命令" tabindex="-1"><a class="header-anchor" href="#执行-php-命令"><span>执行 PHP 命令</span></a></h3>
<p>PHP 命令可以使用 <code v-pre>php</code> 命令执行。当然，这些命令将使用为你的应用程序配置的 PHP 版本执行。要了解更多关于 PHP 版本可用的 Laravel Sail 信息，请查阅 <a href="#sail-php-versions">PHP 版本文档</a>：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail php <span class="token parameter variable">--version</span></span>
<span class="line"></span>
<span class="line">sail php script.php</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="执行-composer-命令" tabindex="-1"><a class="header-anchor" href="#执行-composer-命令"><span>执行 Composer 命令</span></a></h3>
<p>Composer 命令可以使用 <code v-pre>composer</code> 命令执行。Laravel Sail 的应用程序容器中已经安装 Composer 2.x：</p>
<div class="language-nothing line-numbers-mode" data-highlighter="prismjs" data-ext="nothing" data-title="nothing"><pre v-pre class="language-nothing"><code><span class="line">sail composer require laravel/sanctum</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="在已运行的应用中安装-composer-依赖" tabindex="-1"><a class="header-anchor" href="#在已运行的应用中安装-composer-依赖"><span>在已运行的应用中安装 Composer 依赖</span></a></h4>
<p>假如你与团队一起开发应用程序，你也许不是最初创建 Laravel 应用程序的人。因此，当你克隆应用程序的仓库到本地计算机后，仓库默认不会安装的任何 Composer 依赖项，也包括 Sail。</p>
<p>你可以进入到应用程序目录下并执行以下命令来安装应用所需的依赖，这个命令使用一个包含 PHP 与 Composer 的小型 Docker 容器进行应用程序依赖的安装：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token function">docker</span> run <span class="token parameter variable">--rm</span> <span class="token punctuation">\</span></span>
<span class="line">    <span class="token parameter variable">-u</span> <span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> <span class="token parameter variable">-u</span><span class="token variable">)</span></span>:<span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> <span class="token parameter variable">-g</span><span class="token variable">)</span></span>"</span> <span class="token punctuation">\</span></span>
<span class="line">    <span class="token parameter variable">-v</span> <span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">pwd</span><span class="token variable">)</span></span>:/var/www/html"</span> <span class="token punctuation">\</span></span>
<span class="line">    <span class="token parameter variable">-w</span> /var/www/html <span class="token punctuation">\</span></span>
<span class="line">    laravelsail/php82-composer:latest <span class="token punctuation">\</span></span>
<span class="line">    <span class="token function">composer</span> <span class="token function">install</span> --ignore-platform-reqs</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当你使用 <code v-pre>laravelsail/phpXX-composer</code> 镜像时，你应该选择和你的应用程序所用环境相同的 PHP 版本（<code v-pre>74</code>、<code v-pre>80</code>、<code v-pre>81</code>或 <code v-pre>82</code>）。</p>
<h3 id="执行-artisan-命令" tabindex="-1"><a class="header-anchor" href="#执行-artisan-命令"><span>执行 Artisan 命令</span></a></h3>
<p>Artisan 命令可以使用 <code v-pre>artisan</code> 命令执行：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail artisan queue:work</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3 id="执行-node-npm-命令" tabindex="-1"><a class="header-anchor" href="#执行-node-npm-命令"><span>执行 Node / NPM 命令</span></a></h3>
<p>Node 命令可以使用 <code v-pre>node</code> 命令执行，而 NPM 命令可以使用 <code v-pre>npm</code> 命令执行：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail <span class="token function">node</span> <span class="token parameter variable">--version</span></span>
<span class="line"></span>
<span class="line">sail <span class="token function">npm</span> run dev</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果你愿意，你可以使用 Yarn 代替 NPM：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail <span class="token function">yarn</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2 id="与数据库交互" tabindex="-1"><a class="header-anchor" href="#与数据库交互"><span>与数据库交互</span></a></h2>
<h3 id="mysql" tabindex="-1"><a class="header-anchor" href="#mysql"><span>MySQL</span></a></h3>
<p>你可能已经注意到，应用程序的 <code v-pre>docker-compose.yml</code> 文件包含一个 MySQL 容器的配置。该容器使用了 <a href="https://docs.docker.com/storage/volumes/" target="_blank" rel="noopener noreferrer">Docker volume</a>，以便即使在停止和重新启动容器时依然可以持久存储数据库中存储的数据。</p>
<p>此外，在MySQL容器第一次启动时，它将为你创建两个数据库。第一个数据库使用你的 <code v-pre>DB_DATABASE</code> 环境变量的值命名，用于你的本地开发。第二个是专门的测试数据库，名为 <code v-pre>testing</code>，将确保你的测试不会干扰你的开发数据。</p>
<p>一旦你启动了你的容器，你可以通过在你的应用程序的 <code v-pre>.env</code> 文件中设置 <code v-pre>DB_HOST</code> 环境变量来连接到你的应用程序中的 MySQL 实例 <code v-pre>mysql</code>。</p>
<p>要从你的本地机器连接到你的应用程序的 MySQL 数据库，你可以使用一个图形化的数据库管理应用程序，如 <a href="https://tableplus.com/" target="_blank" rel="noopener noreferrer">TablePlus</a>。默认情况下，MySQL 数据库可以通过 <code v-pre>localhost</code> 端口 3306 访问，访问凭证与 <code v-pre>DB_USERNAME</code> 和 <code v-pre>DB_PASSWORD</code> 环境变量的值一致。或者，你可以以 <code v-pre>root</code> 用户的身份连接，它也利用 <code v-pre>DB_PASSWORD</code> 环境变量的值作为密码。</p>
<h3 id="redis" tabindex="-1"><a class="header-anchor" href="#redis"><span>Redis</span></a></h3>
<p>应用程序的 <code v-pre>docker-compose.yml</code> 文件也包含 <a href="https://redis.io/" target="_blank" rel="noopener noreferrer">Redis</a> 容器的配置，此容器使用 <a href="https://docs.docker.com/storage/volumes/" target="_blank" rel="noopener noreferrer">Docker volume</a>，以便即使在停止和重新启动容器后，Redis 数据中存储的数据也可以持久保存。启动容器后，可以通过将应用程序 <code v-pre>.env</code> 文件中的环境变量 <code v-pre>REDIS_HOST</code> 设置为 <code v-pre>redis</code> 来连接到应用程序中的 Redis 实例。</p>
<p>要从本地计算机连接到应用程序的 Redis 数据库，可以使用图形数据库管理应用程序，例如 <a href="https://tableplus.com/" target="_blank" rel="noopener noreferrer">TablePlus</a>。默认情况下，可以从 <code v-pre>localhost</code> 的 6379 端口访问 Redis 数据库。</p>
<h3 id="meilisearch" tabindex="-1"><a class="header-anchor" href="#meilisearch"><span>Meilisearch</span></a></h3>
<p>如果你在安装 Sail 时选择安装 <a href="https://www.meilisearch.com/" target="_blank" rel="noopener noreferrer">MeiliSearch</a> 服务，你的应用程序的 <code v-pre>docker-compose.yml</code> 文件将包含一个 <a href="https://learnku.com/docs/laravel/10.x/scout" target="_blank" rel="noopener noreferrer">Laravel Scout</a> 兼容且强大的<a href="https://github.com/meilisearch/meilisearch-laravel-scout" target="_blank" rel="noopener noreferrer">搜索引擎服务组件配置</a>。启动容器后，你可以通过将环境变量 <code v-pre>MEILISEARCH_HOST</code> 设置为 <code v-pre>http://meilisearch:7700</code> 来连接到应用程序中的 MeiliSearch 实例。</p>
<p>要从本地计算机访问 MeiliSearch 的 Web 管理面板，你可以通过浏览器访问 <code v-pre>http://localhost:7700</code>。</p>
<h2 id="文件存储" tabindex="-1"><a class="header-anchor" href="#文件存储"><span>文件存储</span></a></h2>
<p>如果你计划在生产环境中运行应用程序时使用 Amazon S3 存储文件，你可能希望在安装 Sail 时安装 <a href="https://min.io/" target="_blank" rel="noopener noreferrer">MinIO</a> 服务。 MinIO 提供了一个与 S3 兼容的 API，你可以使用 Laravel 的 <code v-pre>s3</code> 文件存储驱动程序在本地进行开发，而无需在生产 S3 环境中创建用于测试的存储桶。如果在安装 Sail 时选择安装 MinIO，部分 MinIO 相关的配置将添加到应用程序的 <code v-pre>docker-compose.yml</code> 文件中。</p>
<p>默认情况下，应用程序的 <code v-pre>filesystems</code> 配置文件已经包含 <code v-pre>s3</code> 磁盘的磁盘配置。除了使用此磁盘与 Amazon S3 交互之外，你还可以使用它与任何 S3 兼容的文件存储服务（例如 MinIO）进行交互，只需修改控制其配置的关联环境变量即可。例如，在使用 MinIO 时，你的文件系统环境变量配置应定义如下：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token key attr-name">FILESYSTEM_DISK</span><span class="token punctuation">=</span><span class="token value attr-value">s3</span></span>
<span class="line"><span class="token key attr-name">AWS_ACCESS_KEY_ID</span><span class="token punctuation">=</span><span class="token value attr-value">sail</span></span>
<span class="line"><span class="token key attr-name">AWS_SECRET_ACCESS_KEY</span><span class="token punctuation">=</span><span class="token value attr-value">password</span></span>
<span class="line"><span class="token key attr-name">AWS_DEFAULT_REGION</span><span class="token punctuation">=</span><span class="token value attr-value">us-east-1</span></span>
<span class="line"><span class="token key attr-name">AWS_BUCKET</span><span class="token punctuation">=</span><span class="token value attr-value">local</span></span>
<span class="line"><span class="token key attr-name">AWS_ENDPOINT</span><span class="token punctuation">=</span><span class="token value attr-value">http://minio:9000</span></span>
<span class="line"><span class="token key attr-name">AWS_USE_PATH_STYLE_ENDPOINT</span><span class="token punctuation">=</span><span class="token value attr-value">true</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>为了让 Laravel 的 Flysystem 集成在使用 MinIO 时产生正确的 URL，你应该定义 <code v-pre>AWS_URL</code> 环境变量，使其与你的应用程序的本地 URL 相匹配，并在 URL 路径中包含桶的名称。</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token key attr-name">AWS_URL</span><span class="token punctuation">=</span><span class="token value attr-value">http://localhost:9000/local</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>你可以通过 MinIO 控制台创建桶，该控制台可在 <code v-pre>http://localhost:8900</code> 。MinIO 控制台的默认用户名是 <code v-pre>sail</code>，默认密码是 <code v-pre>password</code>。</p>
<blockquote>
<p><strong>警告</strong><br>
使用 MinIO 时，不支持通过 <code v-pre>temporaryUrl</code> 方法生成临时存储的 URL。</p>
</blockquote>
<h2 id="运行测试" tabindex="-1"><a class="header-anchor" href="#运行测试"><span>运行测试</span></a></h2>
<p>Laravel 提供了出色的开箱即用测试，你可以使用 Sail 的 <code v-pre>test</code> 命令运行应用程序的 <a href="https://learnku.com/docs/laravel/10.x/testing" target="_blank" rel="noopener noreferrer">功能和单元测试</a>。任何 PHPUnit 可接受的命令选项都可以透过 <code v-pre>test</code> 命令传递：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail <span class="token builtin class-name">test</span></span>
<span class="line"></span>
<span class="line">sail <span class="token builtin class-name">test</span> <span class="token parameter variable">--group</span> orders</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Sail <code v-pre>test</code> 命令相当于运行 Artisan <code v-pre>test</code> 命令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail artisan <span class="token builtin class-name">test</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>默认情况下, Sail会创建一个专门的 <code v-pre>测试</code> 数据库, 这样你的测试就不会干扰到你的数据库的当前状态. 在默认的Laravel安装中, Sail也会配置你的 <code v-pre>phpunit.xml</code> 文件, 在执行你的测试时使用这个数据库:</p>
<div class="language-xml line-numbers-mode" data-highlighter="prismjs" data-ext="xml" data-title="xml"><pre v-pre class="language-xml"><code><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>env</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>DB_DATABASE<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>testing<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3 id="laravel-dusk" tabindex="-1"><a class="header-anchor" href="#laravel-dusk"><span>Laravel Dusk</span></a></h3>
<p><a href="https://learnku.com/docs/laravel/10.x/dusk" target="_blank" rel="noopener noreferrer">Laravel Dusk</a> 提供了非常优雅、易于使用的浏览器自动化测试 API。有了 Sail，进行浏览器测试更加方便了，你甚至不用在你的本地电脑上安装 Selenium 或者任何其他工具。要开启这项功能，请在 <code v-pre>docker-compose.yml</code> 文件中取消 Selenium 服务相关配置的注释：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line">selenium:</span>
<span class="line">    image: 'selenium/standalone-chrome'</span>
<span class="line">    volumes:</span>
<span class="line">        - '/dev/shm:/dev/shm'</span>
<span class="line">    networks:</span>
<span class="line">        - sail</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>下一步，请确认 <code v-pre>docker-compose.yml</code> 文件中的 <code v-pre>laravel.test</code> 服务配置 <code v-pre>depends_on</code> 是否包含了 <code v-pre>selenium</code> 选项：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line">depends_on:</span>
<span class="line">    - mysql</span>
<span class="line">    - redis</span>
<span class="line">    - selenium</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>最后，你可以透过启动 Sail 并运行 <code v-pre>dusk</code> 命令来进行 Dusk 测试：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail dusk</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="在-apple-silicon-上运行-selenium" tabindex="-1"><a class="header-anchor" href="#在-apple-silicon-上运行-selenium"><span>在 Apple Silicon 上运行 Selenium</span></a></h4>
<p>如果你的本地机器包含 Apple Silicon 芯片，你的 <code v-pre>selenium</code> 服务必须使用 <code v-pre>seleniarm/standalone-chromium</code> 镜像：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line">selenium:</span>
<span class="line">    image: 'seleniarm/standalone-chromium'</span>
<span class="line">    volumes:</span>
<span class="line">        - '/dev/shm:/dev/shm'</span>
<span class="line">    networks:</span>
<span class="line">        - sail</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="预览电子邮件" tabindex="-1"><a class="header-anchor" href="#预览电子邮件"><span>预览电子邮件</span></a></h2>
<p>Laravel Sail 默认的 <code v-pre>docker-compose.yml</code> 文件中包含了一个服务项 <a href="https://github.com/axllent/mailpit" target="_blank" rel="noopener noreferrer">Mailpit</a>。Mailpit 在本地开发过程中拦截应用程序发送的邮件，并提供一个便捷的 Web 界面，这样你就可以在浏览器中预览你的邮件。当使用 Sail 时，Mailpit 的默认主机是 <code v-pre>mailpit</code> ，可通过端口 1025 使用。</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token key attr-name">MAIL_HOST</span><span class="token punctuation">=</span><span class="token value attr-value">mailpit</span></span>
<span class="line"><span class="token key attr-name">MAIL_PORT</span><span class="token punctuation">=</span><span class="token value attr-value">1025</span></span>
<span class="line"><span class="token key attr-name">MAIL_ENCRYPTION</span><span class="token punctuation">=</span><span class="token value attr-value">null</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当 Sail 运行时，你可以透过 <a href="http://localhost:8025/" target="_blank" rel="noopener noreferrer">http://localhost:8025</a> 访问 Mailpit 的 Web 界面。</p>
<h2 id="容器-cli" tabindex="-1"><a class="header-anchor" href="#容器-cli"><span>容器 CLI</span></a></h2>
<p>有时候，你可能想要在应用容器中开启一个 Bash 会话。 可以通过执行 <code v-pre>shell</code> 命令，以访问容器中的文件和已安装的服务，此外，你还可以执行其他任意 Shell 指令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail shell</span>
<span class="line"></span>
<span class="line">sail root-shell</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>想打开一个新的 <a href="https://github.com/laravel/tinker" target="_blank" rel="noopener noreferrer">Laravel Tinker</a> 会话，你可以执行 <code v-pre>tinker</code> 命令：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail tinker</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h2 id="php-版本" tabindex="-1"><a class="header-anchor" href="#php-版本"><span>PHP 版本</span></a></h2>
<p>Sail目前支持通过 PHP 8.2、8.1、PHP 8.0 或 PHP 7.4 为你的应用程序提供服务。目前 Sail 使用的默认 PHP 版本是 PHP 8.2。想更改应用程序使用的 PHP 版本，请在 <code v-pre>docker-compose.yml</code> 文件定义的容器 <code v-pre>laravel.test</code> 相应配置中调整 <code v-pre>build</code> 定义:</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token comment"># PHP 8.2</span></span>
<span class="line">context: ./vendor/laravel/sail/runtimes/8.2</span>
<span class="line"></span>
<span class="line"><span class="token comment"># PHP 8.1</span></span>
<span class="line">context: ./vendor/laravel/sail/runtimes/8.1</span>
<span class="line"></span>
<span class="line"><span class="token comment"># PHP 8.0</span></span>
<span class="line">context: ./vendor/laravel/sail/runtimes/8.0</span>
<span class="line"></span>
<span class="line"><span class="token comment"># PHP 7.4</span></span>
<span class="line">context: ./vendor/laravel/sail/runtimes/7.4</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>此外，你如果想更新你的镜像名称来反映当前使用的 PHP 版本，你可以在 <code v-pre>docker-compose.yml</code> 文件中调整 <code v-pre>image</code> 字段：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line">image: sail-8.1/app</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>在修改 <code v-pre>docker-compose.yml</code> 文件过后，你需要重建容器镜像并重启 Sail：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail build --no-cache</span>
<span class="line"></span>
<span class="line">sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="node-版本" tabindex="-1"><a class="header-anchor" href="#node-版本"><span>Node 版本</span></a></h2>
<p>Sail 默认安装 Node 18。要更改镜像构建时所安装的 Node 版本，你可以在应用程序的 <code v-pre>docker-compose.yml</code> 文件中更新 <code v-pre>laravel.test</code> 服务的 <code v-pre>build.args</code> 定义：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line">build:</span>
<span class="line">    args:</span>
<span class="line">        WWWGROUP: '${WWWGROUP}'</span>
<span class="line">        NODE_VERSION: '14'</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>在修改 <code v-pre>docker-compose.yml</code> 文件过后，你需要重建容器镜像并重启 Sail：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail build --no-cache</span>
<span class="line"></span>
<span class="line">sail up</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="共享你的网站" tabindex="-1"><a class="header-anchor" href="#共享你的网站"><span>共享你的网站</span></a></h2>
<p>有时候你可能需要公开分享你的网站给同事，或是测试应用与 Webhook 的集成。想共享你的网站时，可以使用 <code v-pre>share</code> 命令。当你执行此命令后，将会获取一个随机的网址，例如 <code v-pre>laravel-sail.site</code> 用来访问你的应用程序：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail share</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>当通过 <code v-pre>share</code> 命令共享你的站点时，你应该在 <code v-pre>TrustProxies</code> 中间件中配置应用程序的可信代理。否则，相关的URL 生成的助手函数，例如 <code v-pre>url</code> 和 <code v-pre>route</code> 将无法在生成 URL 生成过程中选择正确 HTTP 主机地址：</p>
<div class="language-php line-numbers-mode" data-highlighter="prismjs" data-ext="php" data-title="php"><pre v-pre class="language-php"><code><span class="line"><span class="token doc-comment comment">/**</span>
<span class="line"> * 应用程序的受信任代理</span>
<span class="line"> *</span>
<span class="line"> * <span class="token keyword">@var</span> <span class="token class-name"><span class="token keyword">array</span><span class="token punctuation">|</span><span class="token keyword">string</span><span class="token punctuation">|</span><span class="token keyword">null</span></span></span>
<span class="line"> */</span></span>
<span class="line"><span class="token keyword">protected</span> <span class="token variable">$proxies</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'*'</span><span class="token punctuation">;</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果你想为你的共享站点自定义子域名，可以在执行 <code v-pre>share</code> 命令时加上 <code v-pre>subdomain</code> 参数：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail share <span class="token parameter variable">--subdomain</span><span class="token operator">=</span>my-sail-site</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><blockquote>
<p><strong>注意</strong><br>
<code v-pre>share</code> 命令是由 <a href="https://github.com/beyondcode/expose" target="_blank" rel="noopener noreferrer">Expose</a> 提供，这是 <a href="https://beyondco.de/" target="_blank" rel="noopener noreferrer">BeyondCode</a> 的一个开源网络隧道服务。</p>
</blockquote>
<h2 id="使用-xdebug-进行调试" tabindex="-1"><a class="header-anchor" href="#使用-xdebug-进行调试"><span>使用 Xdebug 进行调试</span></a></h2>
<p>Laravel Sail 的 Docker 配置包含对 <a href="https://xdebug.org/" target="_blank" rel="noopener noreferrer">Xdebug</a> 的支持，这是一个流行且强大的 PHP 调试器。为了启用 Xdebug，你需要在应用程序的 <code v-pre>.env</code> 文件中添加一些变量以 <a href="https://xdebug.org/docs/step_debug#mode" target="_blank" rel="noopener noreferrer">配置 Xdebug</a>。要启用 Xdebug，你必须在启动 Sail 之前设置适当的应用模式：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token key attr-name">SAIL_XDEBUG_MODE</span><span class="token punctuation">=</span><span class="token value attr-value">develop,debug,coverage</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="linux-主机-ip-配置" tabindex="-1"><a class="header-anchor" href="#linux-主机-ip-配置"><span>Linux 主机 IP 配置</span></a></h4>
<p>在容器内部，<code v-pre>XDEBUG_CONFIG</code> 环境变量被定义为 <code v-pre>client_host=host.docker.internal</code> 以便为 Mac 和 Windows (WSL2) 正确配置 Xdebug。如果你的本地机器运行的是 Linux，确保你运行的是 Docker Engine 17.06.0+ 和 Compose 1.16.0+。否则，你将需要手动定义这个环境变量。</p>
<p>首先，你需要通过运行以下命令来确定要添加到环境变量中的正确主机 IP 地址。通常，<code v-pre>&lt;container-name&gt;</code> 应该是为你的应用程序提供服务的容器的名称，并且通常以 <code v-pre>_laravel.test_1</code> 结尾：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token function">docker</span> inspect <span class="token parameter variable">-f</span> <span class="token punctuation">{</span><span class="token punctuation">{</span>range.NetworkSettings.Networks<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">{</span><span class="token punctuation">{</span>.Gateway<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">{</span><span class="token punctuation">{</span>end<span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token operator">&lt;</span>container-name<span class="token operator">></span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>在获得正确的主机 IP 地址后，你需要在应用程序的 <code v-pre>.env</code> 文件中定义 <code v-pre>SAIL_XDEBUG_CONFIG</code> 变量：</p>
<div class="language-ini line-numbers-mode" data-highlighter="prismjs" data-ext="ini" data-title="ini"><pre v-pre class="language-ini"><code><span class="line"><span class="token key attr-name">SAIL_XDEBUG_CONFIG</span><span class="token punctuation">=</span><span class="token value attr-value">"<span class="token inner-value">client_host=&lt;host-ip-address></span>"</span></span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3 id="通过命令行使用-xdebug-进行调试" tabindex="-1"><a class="header-anchor" href="#通过命令行使用-xdebug-进行调试"><span>通过命令行使用 Xdebug 进行调试</span></a></h3>
<p>在运行 Artisan 命令时，可以使用 <code v-pre>sail debug</code> 命令启动调试会话：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line"><span class="token comment"># 在没有 Xdebug 的情况下运行 Artisan 命令...</span></span>
<span class="line">sail artisan migrate</span>
<span class="line"></span>
<span class="line"><span class="token comment"># 使用 Xdebug 运行 Artisan 命令...</span></span>
<span class="line">sail debug migrate</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="通过浏览器使用-xdebug-进行调试" tabindex="-1"><a class="header-anchor" href="#通过浏览器使用-xdebug-进行调试"><span>通过浏览器使用 Xdebug 进行调试</span></a></h3>
<p>要在通过 Web 浏览器与应用程序交互时调试你的应用程序，请按照 <a href="https://xdebug.org/docs/step_debug#web-application" target="_blank" rel="noopener noreferrer">Xdebug 提供的说明</a> 从 Web 浏览器启动 Xdebug 会话。</p>
<p>如果你使用的是 PhpStorm，请查看 JetBrains 关于 <a href="https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html" target="_blank" rel="noopener noreferrer">零配置调试</a> 的文档。</p>
<blockquote>
<p><strong>警告</strong><br>
Laravel Sail 依赖于 <code v-pre>artisan serve</code> 来为你的应用程序提供服务。从 Laravel 8.53.0 版本开始，<code v-pre>artisan serve</code> 命令只接受 <code v-pre>XDEBUG_CONFIG</code> 和 <code v-pre>XDEBUG_MODE</code> 变量。从 Laravel 8.53.0 版本开始，旧版本的 Laravel（8.52.0 及以下）不支持这些变量并且不接受调试连接。</p>
</blockquote>
<h2 id="定制化" tabindex="-1"><a class="header-anchor" href="#定制化"><span>定制化</span></a></h2>
<p>因为 Sail 就是 Docker，所以你可以自由的定制任何内容，使用 <code v-pre>sail:publish</code> 命令可以将 Sail 预设的 Dockerfile 发布到你的应用程序中，以便于进行定制：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail artisan sail:publish</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>运行这个命令后，Laravel Sail 预设好的 Dockerfile 和其他配置文件将被生成发布到项目根目录的 <code v-pre>docker</code> 目录中。当你自行定制 Sail 配置之后，你可以在应用程序的 <code v-pre>docker-compose.yml</code> 文件中更改应用程序容器的映像名称。在完成上述操作后，你需要使用 <code v-pre>build</code> 命令重新构建容器。如果你使用 Sail 在单台机器上开发多个 Laravel 应用程序，那么为应用程序的镜像分配一个唯一的名称将尤为重要：</p>
<div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh" data-title="sh"><pre v-pre class="language-bash"><code><span class="line">sail build --no-cache</span>
<span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><blockquote>
<p>本译文仅用于学习和交流目的，转载请务必注明文章译者、出处、和本文链接<br>
我们的翻译工作遵照 <a href="https://learnku.com/docs/guide/cc4.0/6589" target="_blank" rel="noopener noreferrer">CC 协议</a>，如果我们的工作有侵犯到您的权益，请及时联系我们。</p>
</blockquote>
<hr>
<blockquote>
<p>原文地址：<a href="https://learnku.com/docs/laravel/10.x/sail/14913" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/10.x/sa...</a></p>
<p>译文地址：<a href="https://learnku.com/docs/laravel/10.x/sail/14913" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/10.x/sa...</a></p>
</blockquote>
</div></template>


